這答案很簡單:
「因為很好用啊!」
本日結束。
沒有啦!
好用、易用固然很重要,不過Rails有時候真的太magic了,
magic到連去rails pacific的講者大神都坦言:其實我也不知道rails怎樣work( 攤手
而根據等價交換原則,magic是的要付出代價的,
今天不會只講好的,不講壞的,且聽我娓娓道來,
至於 Z是不是真的B,答案自在人心,畢竟每個開發者都有自己的信仰。
Let me prove it.
(不過其實如果b是小寫就是false了,啊不重要啦~反正這樣講每個語言都有辦法z > b XD)
話題回到Rails,
Rails其實是Ruby on Rails的簡稱,是一個「框架(framework)」,而不是一種程式語言。
(關於「框架」和「函式庫」的不同,可以參考Angular和jQuery的差別)
框架的意義告訴我們怎樣循著方法去做一件事情,所以知道框架的「框」在哪裡是很重要的,
但,不是現在!
Rails特別的地方在於他的框包前端、後端,
所以如果你連你想做什麼都還不知道,那先用用看就知道,Rails不會讓你失望的。
Rails是我接觸網站開發的起點,
以下簡單介紹幾個我認為Rails相當吸引我的地方:
在越來越重視生產力的現在,我們都是站在巨人的肩膀上看世界的,
很多時候不需要自己去造輪子,在使用RoR寫網站時有很多強者寫的gem可以用,
你可以到rubygems.org看看,這裡就是ruby的聖堂,
當你用這邊的gem時別忘記謙卑的要求自己有一天也要把你的gem放在這。
講是這樣講,通常小弟我都是直接到gem的github頁面去看,
只要Readme寫的能讓人看的懂(我沒有暗指capistrano寫不好),
你就能夠享用功能,而暫時先忽略細節了。
為了避免有人誤會,我還是認為一個優秀的開發者是要去弄懂底層到底是發生什麼事情的,
儘管這些magic對初學的人來說是美好的,
不過現在省掉了這些survey的時間,未來回頭過來救火可能要花更多時間,
所以當越來越深入了解這個框架和生態時,永遠都要記得挖掘更深處的知識。
講個小小的心得,當你想要實作一個功能,卻不只一個gem符合你需求時,
先去github搜尋一下,基本上越多人用的不代表越好,(好像大家部署都習慣用capistrano耶 沒什麼特別意思啦)
但卻代表你去發問求救的時候越可能有人來幫助你,
不要忘記網路的意義在於分享和連接彼此,我們都是永遠的新手。
「習慣優於配置。」
" Convention over configuration."
在寫Rails時會有一定的規則要遵循,
只要照著規則走,開發的速度便會突飛猛進,
並不需要做太多額外的設定,這是RoR的設計哲學。
這裡說的規則就是我們在這裡說的「習慣」(Convention),
當我們寫出很不符合「習慣」的code時,就得好好回顧一下自己是不是哪些地方硬幹了什麼事情,
也許去查一下document就會知道原來這些我們硬幹的事情早有人寫出更好的方法了。
違反習慣去做額外的配置,在Rails中很容易讓你寸步難行,
有人視遵守這些「習慣」為綁手綁腳的桎梏,
而對於剛開始接觸網站開發的我來說卻好像在茫茫大海中抓到一根浮木,
遵循這些規則做也會漸漸理解MVC的開發理念,還有Restful的路由設計到底是怎麼回事,
太多太多了,至少到目前為止遵循這些習慣並不讓我變得死板,反而還越學越多東西。
Ruby on Rails是用Ruby實作的框架。
坦白說,Ruby真的是一門很好寫的語言,有許多好用的內建方法,
也不需要寫太多的括號和分號。
(經驗法則告訴我其實()
或是{}
還是儘量不要去偷懶會比較好XD,電腦看不懂好解決,人看不懂的麻煩比較大)
簡單之外也相當的靈活,從中也能學到許多物件導向的概念,
儘管有些高手會認為這簡直像個玩具語言,但對很多人來說能用、易用才是我們首要的考量,
我喜歡Ruby,我也喜歡Rails。
久了之後你會發現有時候知其然而不知其所以然,
要對電腦的操作有更大的自由度,勢必就會犧牲一些開發上的效率,
(舉例來說就像是C中的指標)
還是要回到這些歷久彌新的語言去鑽研,
想寫出更好更棒的code,不下一番苦心是做不到的。
既然講到語言,
那就補充一下,在開發網站的時候你還是離不開CSS和Javascript的,
除非你完全不在乎網站長什麼樣子、和使用者的體驗如何,
大概就像iphone6預購頁面或是屹立不搖的台鐵訂票頁面吧!
(不過喜歡Ruby的話應該也會覺得Javascript蠻有趣的,只是得「習慣」一些像是prototype之類比較特別的地方,
這裡推薦這本書:http://shop.oreilly.com/product/9780596517748.do)
這裡要講的太多了,網路上會有更多的資源去挖掘,
總之如果要學Rails就先擁抱Ruby吧!
當網站要儲存東西時,勢必得用到資料庫,
記得當初我最害怕的就是這部分,因為我壓根沒學過SQL的語法。
(事後想想這種擔心蠻蠢的,去學就對了)
而在Rails裡面有Active Record來幫我們做這件事,
只要用Ruby照著語法寫就能對資料庫作處理,
一開始甚至不用管Postgres、Mysql......等等之間的差異,
對於沒學過資料庫的人來說真是太好美好了。
But,沒有錯又要潑冷水了,太美好跟Magic一樣都是要付出代價的,
rails一開始真的讓我以為自己是劉謙,什麼都變得出來,
但是注意到我只說一開始而已嘛?
雖然Rails是條捷徑,但夜路走多了還是會......
沒錯,想要成為好的開發者也不能永遠對資料庫一無所知,
你遲早還是會遇到許多奇奇怪怪的問題,還是逃不開group、join對你的糾纏。
我自己第一次遇到網站跑超慢的時候,還以為自己的作品終於遇到傳說中效能的問題了,
看了一下GA發現瀏覽的人數跟平常差不多,
最後自以為感慨撥頭髮:「唉~畢竟Ruby這麼潮又好寫,終究是犧牲了效能啊!」
結果打開log一看,滿坑滿谷的query,n+1 query,是你?
接著痛定思痛重新學好SQL。
要追求的不是偷懶的小聰明,而是省略繁瑣機械化細節的大智慧,
如果你跟我一樣剛接觸網站開發,那Rails的確是一條需要且戰且走的捷徑。
(偷渡抱怨一下我還是覺得寫SQL是一件很痛苦的事情,儘管Rails允許我們寫SQL,
但我能避則避,原則上就是以理解代替硬幹。)
其實如果只是要做單純的CMS,joomla、wordpress都是很棒的選擇,
他們也一樣簡單,記住Rails是一個好用的東西,
但不是問題的唯一解答。
不要因為你寫rails就不去嘗試其他框架,
不要因為你喜歡ruby就不去碰其他語言,
你可以認為別人使用的東西有需要改進的地方,
但別忘了,ruby和rails也不是完美的,
這就是謙良恭儉讓的asian power。
講了這麼多,如果你還能接受Rails的話,明天就要展開冒險啦!
內建有些東西蠻難用的,
像是:turbolink,
不過剛開始用倒是沒什麼感覺啦XD
都要等付出魔法的代價才會發現